home *** CD-ROM | disk | FTP | other *** search
/ PC Direct 1998 August / PC Direct August 1998.iso / S / powerj / Product / h.z / FLOAT.H < prev    next >
Encoding:
C/C++ Source or Header  |  1997-01-30  |  6.4 KB  |  214 lines

  1. /*
  2.  *  float.h    Floating point functions
  3.  *
  4.  *  Copyright by WATCOM International Corp. 1988-1996.  All rights reserved.
  5.  */
  6. #ifndef _FLOAT_H_INCLUDED
  7. #define _FLOAT_H_INCLUDED
  8. #if !defined(_ENABLE_AUTODEPEND)
  9.   #pragma read_only_file;
  10. #endif
  11. #ifdef __cplusplus
  12. extern "C" {
  13. #endif
  14.  
  15. #ifndef _COMDEF_H_INCLUDED
  16.  #include <_comdef.h>
  17. #endif
  18.  
  19. #define FLT_RADIX    2
  20. #define FLT_ROUNDS    1    /* round to nearest */
  21.  
  22. /* number of base-FLT_RADIX digits in the floating point mantissa */
  23. #define FLT_MANT_DIG    24
  24. #define DBL_MANT_DIG    53
  25. #define LDBL_MANT_DIG    53
  26.  
  27. /* number of decimal digits of precision */
  28. #define FLT_DIG     6
  29. #define DBL_DIG     15
  30. #define LDBL_DIG    15
  31.  
  32. /* minimum negative integer such that FLT_RADIX raised to that power minus 1
  33.  is a normalized floating point number */
  34. #define FLT_MIN_EXP    (-127)
  35. #define DBL_MIN_EXP    (-1023)
  36. #define LDBL_MIN_EXP    (-1023)
  37.  
  38. /* minimum negative integer such that 10 raised to that power is in the
  39.    range of normalized floating point numbers */
  40. #define FLT_MIN_10_EXP    (-38)
  41. #define DBL_MIN_10_EXP    (-307)
  42. #define LDBL_MIN_10_EXP (-307)
  43.  
  44. /* maximum integer such that FLT_RADIX raised to that power minus 1 is a
  45.    representable floating point number */
  46. #define FLT_MAX_EXP    127
  47. #define DBL_MAX_EXP    1023
  48. #define LDBL_MAX_EXP    1023
  49.  
  50. /* maximum integer such that 10 raised to that power is in the range of
  51.    representable floating point numbers */
  52. #define FLT_MAX_10_EXP    38
  53. #define DBL_MAX_10_EXP    308
  54. #define LDBL_MAX_10_EXP 308
  55.  
  56. /* maximum representable floating point number */
  57. #define FLT_MAX     3.402823466e+38f
  58. #define DBL_MAX     1.79769313486231500e+308
  59. #define LDBL_MAX    DBL_MAX
  60.  
  61. /* minimum positive floating point number x such that 1.0 + x != 1.0 */
  62. #define FLT_EPSILON    1.192092896e-7f
  63. #define DBL_EPSILON    2.22044604925031300e-016
  64. #define LDBL_EPSILON    DBL_EPSILON
  65.  
  66. /* minimum representable positive floating point number */
  67. #define FLT_MIN     1.175494351e-38f
  68. #define DBL_MIN     2.22507385850720200e-308
  69. #define LDBL_MIN    DBL_MIN
  70.  
  71. /*
  72.  *  8087/80287/80387 math co-processor control information
  73.  */
  74.  
  75. /* 80(x)87 Control Word Mask and bit definitions. */
  76.  
  77. #define _MCW_EM     0x003f    /* Interrupt Exception Masks */
  78. #define _EM_INVALID    0x0001    /*   invalid */
  79. #define _EM_DENORMAL    0x0002    /*   denormal */
  80. #define _EM_ZERODIVIDE    0x0004    /*   zero divide */
  81. #define _EM_OVERFLOW    0x0008    /*   overflow */
  82. #define _EM_UNDERFLOW    0x0010    /*   underflow */
  83. #define _EM_INEXACT    0x0020    /*   inexact result - precision */
  84.  
  85. #define _MCW_IC     0x1000    /* Infinity Control */
  86. #define _IC_AFFINE    0x1000    /*   affine */
  87. #define _IC_PROJECTIVE    0x0000    /*   projective */
  88.  
  89. #define _MCW_RC     0x0c00    /* Rounding Control */
  90. #define _RC_NEAR    0x0000    /*   near */
  91. #define _RC_DOWN    0x0400    /*   down */
  92. #define _RC_UP        0x0800    /*   up */
  93. #define _RC_CHOP    0x0c00    /*   chop */
  94.  
  95. #define _MCW_PC     0x0300    /* Precision Control */
  96. #define _PC_24        0x0000    /*    24 bits */
  97. #define _PC_53        0x0200    /*    53 bits */
  98. #define _PC_64        0x0300    /*    64 bits */
  99.  
  100. /* initial Control Word value */
  101.  
  102. #define _CW_DEFAULT (_IC_AFFINE | _RC_NEAR | _PC_53 \
  103.             | _EM_INVALID | _EM_DENORMAL | _EM_ZERODIVIDE \
  104.             | _EM_OVERFLOW | _EM_UNDERFLOW | _EM_INEXACT)
  105.  
  106. /* 80(x)87 Status Word bit definitions */
  107.  
  108. #define _SW_INVALID    0x0001    /* invalid */
  109. #define _SW_DENORMAL    0x0002    /* denormal */
  110. #define _SW_ZERODIVIDE    0x0004    /* zero divide */
  111. #define _SW_OVERFLOW    0x0008    /* overflow */
  112. #define _SW_UNDERFLOW    0x0010    /* underflow */
  113. #define _SW_INEXACT    0x0020    /* inexact (precision) */
  114.  
  115. /* the following are generated by software */
  116.  
  117. #define _SW_UNEMULATED        0x0040  /* unemulated instruction */
  118. /* invalid subconditions (_SW_INVALID also set) */
  119. #define _SW_SQRTNEG        0x0080  /* square root of a neg number */
  120. #define _SW_STACKOVERFLOW   0x0200  /* FP stack overflow */
  121. #define _SW_STACKUNDERFLOW  0x0400  /* FP stack underflow */
  122.  
  123. /* Floating-point error codes */
  124.  
  125. #define _FPE_INVALID        0x81
  126. #define _FPE_DENORMAL        0x82
  127. #define _FPE_ZERODIVIDE     0x83
  128. #define _FPE_OVERFLOW        0x84
  129. #define _FPE_UNDERFLOW        0x85
  130. #define _FPE_INEXACT        0x86
  131.  
  132. #define _FPE_UNEMULATED     0x87
  133. #define _FPE_SQRTNEG        0x88
  134. #define _FPE_STACKOVERFLOW    0x8a
  135. #define _FPE_STACKUNDERFLOW    0x8b
  136. #define _FPE_EXPLICITGEN    0x8c
  137. #define _FPE_IOVERFLOW        0x8d /* issued on fist(p) when value is too
  138.                     large to be represented as integer */
  139. #define _FPE_LOGERR        0x8e
  140. #define _FPE_MODERR        0x8f
  141.  
  142. #if !defined(NO_EXT_KEYS) /* extensions enabled */
  143. /*
  144.  *  8087/80287/80387 math co-processor control information
  145.  */
  146.  
  147. /* 80(x)87 Control Word Mask and bit definitions. */
  148.  
  149. #define MCW_EM        _MCW_EM
  150. #define EM_INVALID    _EM_INVALID
  151. #define EM_DENORMAL    _EM_DENORMAL
  152. #define EM_ZERODIVIDE    _EM_ZERODIVIDE
  153. #define EM_OVERFLOW    _EM_OVERFLOW
  154. #define EM_UNDERFLOW    _EM_UNDERFLOW
  155. #define EM_INEXACT    _EM_INEXACT
  156. #define EM_PRECISION    _EM_INEXACT    /* WATCOM's name */
  157.  
  158. #define MCW_IC        _MCW_IC
  159. #define IC_AFFINE    _IC_AFFINE
  160. #define IC_PROJECTIVE    _IC_PROJECTIVE
  161.  
  162. #define MCW_RC        _MCW_RC
  163. #define RC_NEAR     _RC_NEAR
  164. #define RC_DOWN     _RC_DOWN
  165. #define RC_UP        _RC_UP
  166. #define RC_CHOP     _RC_CHOP
  167.  
  168. #define MCW_PC        _MCW_PC
  169. #define PC_24        _PC_24
  170. #define PC_53        _PC_53
  171. #define PC_64        _PC_64
  172.  
  173. /* 80(x)87 Status Word bit definitions */
  174.  
  175. #define SW_INVALID        _SW_INVALID
  176. #define SW_DENORMAL        _SW_DENORMAL
  177. #define SW_ZERODIVIDE        _SW_ZERODIVIDE
  178. #define SW_OVERFLOW        _SW_OVERFLOW
  179. #define SW_UNDERFLOW        _SW_UNDERFLOW
  180. #define SW_INEXACT        _SW_INEXACT
  181. /* the following are generated by software */
  182. #define SW_UNEMULATED        _SW_UNEMULATED
  183. #define SW_SQRTNEG        _SW_SQRTNEG
  184. #define SW_STACKOVERFLOW    _SW_STACKOVERFLOW
  185. #define SW_STACKUNDERFLOW   _SW_STACKUNDERFLOW
  186.  
  187. /* Floating-point error codes */
  188.  
  189. #define FPE_INVALID        _FPE_INVALID
  190. #define FPE_DENORMAL        _FPE_DENORMAL
  191. #define FPE_ZERODIVIDE        _FPE_ZERODIVIDE
  192. #define FPE_OVERFLOW        _FPE_OVERFLOW
  193. #define FPE_UNDERFLOW        _FPE_UNDERFLOW
  194. #define FPE_INEXACT        _FPE_INEXACT
  195. #define FPE_UNEMULATED        _FPE_UNEMULATED
  196. #define FPE_SQRTNEG        _FPE_SQRTNEG
  197. #define FPE_STACKOVERFLOW   _FPE_STACKOVERFLOW
  198. #define FPE_STACKUNDERFLOW  _FPE_STACKUNDERFLOW
  199. #define FPE_EXPLICITGEN     _FPE_EXPLICITGEN
  200. #define FPE_IOVERFLOW        _FPE_IOVERFLOW
  201. #define FPE_LOGERR        _FPE_LOGERR
  202. #define FPE_MODERR        _FPE_MODERR
  203.  
  204. _WMRTLINK extern unsigned _clear87(void);
  205. _WCRTLINK extern unsigned _control87(unsigned,unsigned);
  206. _WCRTLINK extern void     _fpreset(void);
  207. _WMRTLINK extern unsigned _status87(void);
  208. #endif
  209.  
  210. #ifdef __cplusplus
  211. };
  212. #endif
  213. #endif
  214.